//
// Created by 罗玉龙 on 2017/6/18.
//
#include <iostream>
using namespace std;
void testTempVar(string &temp)
{
    temp = "it just changed";
}
void testNormal(string temp)
{
    temp = "it changed again";
}
void test()
{
    //    string temp = "hehe";
//    cout << "begin function : " << temp << endl;
//    testTempVar(temp);
//    cout << "after function : " << temp << endl;
//    testNormal(temp);
//    cout << "after function : " << temp << endl;
//
//    double balance[5]= {10.0, 2.2, 3.5};
//    cout << "double array : " << balance << endl;
//
//    char a1[] = {'C', '+', '+'};          // 初始化，没有 null 
//    char a2[] = {'C', '+', '+', '\0'};    // 初始化，明确有 null 
//    char a3[] = "C++";                    // null 终止符自动添加
//   //const char a4[6] = "runoob";          // 报错，没有 null 的位置
//
//    char s1[] = "1";
//    string s2 = "2";
//    strcpy(s1, s2.c_str());
//    cout << "result : " << s1 << endl;
//
//    //指针
//    int  var = 20;   // 实际变量的声明
//    int  *ip;        // 指针变量的声明
//
//    ip = &var;       // 在指针变量中存储 var 的地址
//
//    cout << "Value of var variable: ";
//    cout << var << endl;
//
//    // 输出在指针变量中存储的地址
//    cout << "Address stored in ip variable: ";
//    cout << ip << endl;
//
//    // 访问指针中地址的值
//    cout << "Value of *ip variable: ";
//    cout << *ip << endl;


    /*
     * 引用很容易与指针混淆，它们之间有三个主要的不同：
不存在空引用。引用必须连接到一块合法的内存。
一旦引用被初始化为一个对象，就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
引用必须在创建时被初始化。指针可以在任何时间被初始化。
     */
    // 声明简单的变量
    int    i;
    double d;

    // 声明引用变量
    int&    r = i;
    double& s = d;

    i = 5;
    cout << "Value of i : " << i << endl;
    cout << "Value of i reference : " << r  << endl;

    d = 11.7;
    cout << "Value of d : " << d << endl;
    cout << "Value of d reference : " << s  << endl;
}